微信公众号:BoomDev
如有问题或建议请留言
最近更新:2018-10-14
开发中经常遇见到容易混淆的概念,根本原因是没有理解其中的本质。今天把下面这些理解明白。
编码解码 Encoding & Decoding
把数据从一种形式转换为另一种形式,解码可以还原数据
加密解密 Encryption & Decryption
- 对称加密
- 原理:使用密钥和加密算法对数据进行转换,得到的无意义数据即为密文;使用密钥和解密算法对密文进行逆向转换得到原数据。
- 经典算法:DES(56 位密钥,密钥太短⽽而逐渐被弃⽤用),AES(128 位、192 位、256 位密钥,现在最流⾏行行)
- 非对称加密
- 原理:使用公钥对数据进行加密得到密文,使用私钥对数据进行解密得到原数据
- 延伸:数字签名
- 经典算法:RSA(可⽤用于加密和签名),DSA(仅⽤用于签名,但速度更快)
- 密钥和密码登录
- 密钥(key)
- 场景:用于加密和解密
- 目的:保证数据被盗时不会被人读懂内容
- 焦点:数据
- 登陆密码(password)
- 场景:用户进入网站或游戏前的身份验证
- 目的:数据提供方或应用服务方对拥有者数据的保护
- 焦点:身份
- 密钥(key)
- Base64
Base64 就是将二进制数据转换成有 64 个字符组成的字符串的编码算法,由 A~Z、a~z、0~9、+/ 组成的 64 个字符。
用途:将⼆二进制数据扩充了了储存和传输途径(例如可以把数据保存到文件、可以通过聊天对话框或 短信形式发送⼆进制数据、可以在 URL 中加⼊入简单的二进制数据)
Base64 缺点:因为⾃自身的原理理(6 位变 8 位),因此每次 Base64 编码之后,数据都会增⼤大约 1/3,所以会影响存储和传输性能。
数字签名 Digital Signature
数字签名是非对称密钥加密技术与数字摘要技术的应用
压缩解压缩 Compression & Decompression
- 压缩:将数据使用更具有存储优势的编码算法进行编码
- 解压缩:将压缩数据解码还原成原来的形式
- 常见的压缩算法:JPEG、MP3
- 压缩属于编码吗?
- 编码是什么意思:把数据从一种形式转换为另一种形式,可以还原数据
- 压缩属于编码:解压缩过程属于解码过程
序列化 Serialization
- 序列化:把数据对象(一般是内存中,JVM 中的对象)转换成字节序列的过程。
- 反序列化:把子节码重新转换成内存中的对象
- 目的:让内存中的对象可以被存储和传输
- 序列化不是编码
哈希 Hash
- 定义:把任意数据转换成指定大小范围(通常很小)的数据
- 作用:摘要,数字指纹。
- 经典算法:MD5,SHA1,SHA256 等
- 实际用途:
- 唯一性验证。例如:Java 中 hashCode 的方法
- 快速查找:hashCode 和 HashMap
- 隐私保护:例如:把密码 MD5 处理过后再存储到数据库(升级处理:加盐)
- hash 不是编码也不是加密:Hash 是单向过程,不可逆,无法进行逆向恢复操作,因此不属于编码和加密 (MD5 不是加密)
字符集 Charset
- 含义:一个由整数向现实世界中的文字符号的 Map
- ASCII:128 个字符,1 字节
- ISO-8859-1:对 ASCII 进行扩充,1 字节
- Unicode:13 万个字符,多字节
- UTF-8:Unicode 的编码分支
- UTF-16:Unicode 的编码分支
- GBK / GB2313 / GB18030:中国自研标准,多字节,字符集 + 编码
我是一名有备而来的 Android 工程师
微信公众号:BoomDev
欢迎关注我、一起学习、一起进步!